/**
 * Created by callmesoul on 2017/4/10.
 */
var jwt = require('jsonwebtoken');
var Oauth = require('co-wechat-oauth');
module.exports = (options,app) => {
    return async function (ctx,next) {
        if(ctx.request.method !== "GET"){//不是get方法要验证token
            const token =ctx.request.header['nochat-token'] ? ctx.request.header['nochat-token'] : null;
            if(token){//有token
                if(jwt.verify(token,ctx.locals.tokenScrect)){//解析token成功
                    var result=jwt.verify(token,ctx.locals.tokenScrect);
                    if(result.data.user){
                        var user=await ctx.model.User.findById(result.data.user.id);
                        if(user){//数据库还有这个用户且用户没被删除
                            console.log('token通过，用户id：'+ result.data.user.id);
                            ctx.user=user;
                            await next();
                        }else{//用户已不存在或无效
                            console.log('token用户不存在，用户id：'+ result.data.user.id);
                            ctx.response.status=403;
                            ctx.response.body={
                                message:"token无效或过期，禁止请求！"
                            }
                        }
                    }else{//result.data.admin
                        var admin=await ctx.model.Admin.findById(result.data.admin.id,{attributes:{exclude:'passWord'}});
                        if(admin){//数据库还有这个用户且用户没被删除
                            console.log('token通过，用户id：'+ result.data.admin.id);
                            ctx.admin=admin;
                            await next();
                        }else{//用户已不存在或无效
                            console.log('token用户不存在，用户id：'+ result.data.admin.id);
                            ctx.response.status=403;
                            ctx.response.body={
                                message:"token无效或过期，禁止请求！"
                            }
                        }
                    }

                }else{//token不正确，解析失败
                    console.log('token有误');
                    ctx.response.status=403;
                    ctx.response.body={
                        message:"token无效或过期，禁止请求！"
                    }
                }
            }else{///没有token不予通过；
                console.log('没有token不予通过');
                ctx.response.status=403;
                ctx.response.body={
                    message:"token无效或过期，禁止请求！"
                }
            }
        }else {//get方法直接通过
            const token =ctx.request.header['nochat-token'] ? ctx.request.header['nochat-token'] : null;
            if(token) {//有token
                if (jwt.verify(token, ctx.locals.tokenScrect)) {//解析token成功
                    var result = jwt.verify(token, ctx.locals.tokenScrect);
                    if (result.data.user) {
                        var user = await ctx.model.User.findById(result.data.user.id);
                        if (user) {//数据库还有这个用户且用户没被删除
                            console.log('token通过，用户id：' + result.data.user.id);
                            ctx.user = user;
                        }
                    }else{//result.data.admin
                        var admin=await ctx.model.Admin.findById(result.data.admin.id,{attributes:{exclude:'passWord'}});
                        if(admin){//数据库还有这个用户且用户没被删除
                            console.log('token通过，用户id：'+ result.data.admin.id);
                            ctx.admin=admin;
                        }
                    }


                }
            }
            await next();
        }

    };
};
